//
//  HomeTableViewController.swift
//  sinaWB
//
//  Created by 杨运旺 on 15/11/7.
//  Copyright © 2015年 杨运旺. All rights reserved.
//

import UIKit
import SVProgressHUD
/// 微博 Cell 的可重用表示符号
let StatusCellNormalId = "StatusCellNormalId"

class HomeTableViewController: VisitorTableViewController {
    
    /// 微博数据列表模型
    private lazy var listViewModel = StatusListViewModel()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !UserAccountViewModel.sharedUserAccount.userLogon{
        
        visitorView?.setupInfo(nil, title: "关注一些人，回这里看看有什么惊喜")
        return
        }
        
        prepareTableView()
        loadData()
        
    }
    
    
    /// 准备表格
    private func prepareTableView(){
        // 注册可重用Cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: StatusCellNormalId)
        // 取消分隔线
        tableView.separatorStyle = .None
        
        // 自动计算行高 - 需要一个自上而下的自动布局的控件，指定一个向下的约束
        tableView.estimatedRowHeight = 400
    }
    
    /// 加载数据
    private func loadData() {
        
        listViewModel.loadStatus { (isSuccessed) -> () in
            
            if !isSuccessed {
                SVProgressHUD.showInfoWithStatus("加载数据错误，请稍后再试")
                return
            }
            
            print(self.listViewModel.statusList)
            
            // 刷新数据
            self.tableView.reloadData()
        }
    }
}


// MARK: - 数据源方法
extension HomeTableViewController{
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listViewModel.statusList.count
    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
       let cell = tableView.dequeueReusableCellWithIdentifier(StatusCellNormalId, forIndexPath: indexPath) as! StatusCell

        cell.viewModel = listViewModel.statusList[indexPath.row]
        
        return cell
    }
    
    
    /**
        行高
        
        --设置了预估行高
        * 当前显示的行高方法会调用三次(每个版本Xcode调用次数可能不同)
     
        问题: 预估行高如何不同,计算次数不同
     
        1. 使用预估行高,计算出预估的 contenSize
        2. 根据预估行高,判断计算次数
        3. 如果预估行高过大,超出预估范围,顺序计算后续行高,一直到填满屏幕退出,同时更新 contenSize
        4. 使用预估行高,每个 Cell 的显示前需要计算,单个 Cell 的效率是低的,但整体效率高!
     
        执行顺序    行数 -> 每个[cell -> 行高]
     
        预估行高: 尽量靠近!<不要太大也不要太小>
     
        --没有设置预估行高
        
        * 1.计算所有行的高度
        * 2.在计算显示行的高度
     
        问题: 为什么要调用所有的预估方法? UITableView 继承自UIScrollView
            表格视图滚动非常流畅 -> 需要提前计算出contenSize
        
        执行顺序    行数 -> 行高 -> cell
     
     */
    override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
        // 不会调用行高方法
        // 不推荐使用
//        tableView.dequeueReusableCellWithIdentifier()
//        // 1.视图模型
//        let vm = listViewModel.statusList[indexPath.row]
//        // 2.cell
//        let cell = StatusCell(style: .Default, reuseIdentifier: StatusCellNormalId)
//        // 3.返回高度
//        return cell.rowHeight(vm)
        
        
        
        return listViewModel.statusList[indexPath.row].rowHeight
    }
}